package com.example.easyexcel.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.example.easyexcel.entity.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 使用模板生成excel
 *
 * @author tu228
 */
@Slf4j
@RestController
@RequestMapping("/template")
public class ExcelTemplateController {

    /**
     * 简单方式写01
     *    列表填充
     */
    @RequestMapping(value = "/simpleWrite01", method = RequestMethod.GET)
    public void simpleWrite01() {
        String template = this.getClass().getClassLoader().getResource("templates/template01.xlsx").getPath();
        // 填充完成之后的excel
        String fillName = "E:\\office\\study\\tmp\\easyExcel\\template\\templateExcel01.xlsx";

        // 构建数据
        List<FillData> dataList = getFillData();

        // 模板填充
        EasyExcel.write(fillName).withTemplate(template).sheet(0).doFill(dataList);
    }

    /**
     * 简单方式写02
     *    单行填充，easyExcel该版本好像不支持
     */
    @RequestMapping(value = "/simpleWrite02", method = RequestMethod.GET)
    public void simpleWrite02() {
        String template = this.getClass().getClassLoader().getResource("templates/template02.xlsx").getPath();
        // 填充完成之后的excel
        String fillName = "E:\\office\\study\\tmp\\easyExcel\\template\\templateExcel02.xlsx";

        // 构建数据
        List<FillData> dataList = getFillData();

        // 模板填充
        EasyExcel.write(fillName).withTemplate(template).sheet(0).doFill(dataList);
    }

    /**
     * 简单方式写03
     *    组合填充
     */
    @RequestMapping(value = "/simpleWrite03", method = RequestMethod.GET)
    public void simpleWrite03() {
        String template = this.getClass().getClassLoader().getResource("templates/template03.xlsx").getPath();
        // 填充完成之后的excel
        String fillName = "E:\\office\\study\\tmp\\easyExcel\\template\\templateExcel03.xlsx";

        // 创建填充配置 换行填充
        FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();

        // 创建写对象
        ExcelWriter excelWriter =
                EasyExcel.write(fillName).withTemplate(template).build();

        // 创建Sheet对象
        WriteSheet sheet = EasyExcel.writerSheet(0).build();

        // 多组填充excel
        excelWriter.fill(getFillData(), fillConfig, sheet);

        // 单组填充
        HashMap<String, Object> unitData = new HashMap<>();
        unitData.put("nickname", "张三");
        unitData.put("salary", 8088.66);
        excelWriter.fill(unitData, sheet);

        // 关闭流
        excelWriter.finish();
    }


    /**
     * 获取填充数据
     */
    private List<FillData> getFillData() {
        List<FillData> dataList = new ArrayList<>();
        FillData fillData01 = FillData.builder().name("华为01").number(111.11).build();
        FillData fillData02 = FillData.builder().name("华为02").number(222.22).build();
        FillData fillData03 = FillData.builder().name("华为03").number(333.33).build();
        FillData fillData04 = FillData.builder().name("华为04").number(444.44).build();
        FillData fillData05 = FillData.builder().name("华为05").number(555.55).build();
        FillData fillData06 = FillData.builder().name("华为06").number(666.66).build();
        FillData fillData07 = FillData.builder().name("华为07").number(777.700).build();
        dataList.add(fillData01);
        dataList.add(fillData02);
        dataList.add(fillData03);
        dataList.add(fillData04);
        dataList.add(fillData05);
        dataList.add(fillData06);
        dataList.add(fillData07);
        return dataList;
    }
}
